/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.ejb.SolicitudFacade;
import com.ejb.UsuarioFacade;
import com.entidades.Solicitud;
import com.entidades.TipoEstado;
import com.entidades.TipoHora;
import com.entidades.TipoRol;
import com.entidades.TipoSolicitud;
import com.entidades.TipoTiempoPrestamo;
import com.entidades.Usuario;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.exceptions.BancoException;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author jeronimo
 */
@ManagedBean(name = "gestorSolicitud")
@ViewScoped
public class GestorSolicitudController {

    private List<Solicitud> listaSolicitud;
    private Solicitud solicitudSelected;
    private Solicitud solicitud;
    private long cedula;
    private int codigorecurso;
    private String estado = "Pendiente";
    private Usuario cliente;
    private List<Usuario> listaClientes;
    private Usuario clienteSelected;
    @EJB
    SolicitudFacade ejbSolicitud;
    @EJB
    UsuarioFacade ejbCliente;

    //En el constructor no se puede usar el EJB porque no se ha ejecutado el inject, se debe hacer en el init
    public GestorSolicitudController() {
        System.out.println("Se ejecuta constructor en clase GestorClientesController");
        solicitud = new Solicitud();
    }

    @PostConstruct
    public void init() {
        System.out.println("Se ejecuta init() en clase GestorClientesController");
        listaSolicitud = ejbSolicitud.findAll();
    }

    public List<Solicitud> getListaSolicitud() {
        return listaSolicitud;
    }

    public List<Solicitud> getListaSolicitud1() {

        String aux = "";
        Solicitud Usr = null;
        for (int i = 0; i < listaSolicitud.size(); i++) {
            Usr = listaSolicitud.get(i);
            aux = String.valueOf(Usr.getEstado());
            System.out.print(aux);
            System.out.print(aux + " == " + "Pendiente");
            if (!aux.equalsIgnoreCase("Pendiente")) {
                System.out.print("si");
                listaSolicitud.remove(i);
            }
        }
        return listaSolicitud;
    }

    public List<Solicitud> getListaSolicitud2() {
        String aux = "";
        Solicitud Usr = null;
        for (int i = 0; i < listaSolicitud.size(); i++) {
            Usr = listaSolicitud.get(i);
            aux = String.valueOf(Usr.getEstado());
            System.out.print(aux);
            System.out.print(aux + " == " + "Rechazado");
            if (aux.equals("Rechazado")) {
                System.out.print("si");
                listaSolicitud.remove(i);
            }
        }
        return listaSolicitud;
    }

    public void setListaSolicitud(List<Solicitud> listaSolicitud) {
        this.listaSolicitud = listaSolicitud;
    }

    public Solicitud getSolicitudSelected() {
        return solicitudSelected;
    }

    public long getCedula() {
        return cedula;
    }

    public void setCedula(long cedula) {
        this.cedula = cedula;
    }

    public int getCodigorecurso() {
        return codigorecurso;
    }

    public void setCodigorecurso(int codigorecurso) {
        this.codigorecurso = codigorecurso;
    }

    public Solicitud getSolicitud() {
        return solicitud;
    }

    public void setSolicitud(Solicitud solicitud) {
        this.solicitud = solicitud;
    }

    /*
     * Para demostrar que es mejor tener un solo controller para acciones relacionadas
     * con una misma entidad, se requiere refrescar la lista en pantalla
     */
    public void testAction() {
        System.out.println("testAction ejecutado con exito");
    }

    /* public void crearSolicitud() {
     String msg = "Solcitud creada con exito !!!";
     try {
     ejbSolicitud.crearSolicitud(solicitud);
     } catch (BancoException be) {
     msg = be.getMessage();
     }
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
     }*/
    public void crearSolicitud1() {
        String msg;
        System.out.println(cedula + "-" + codigorecurso);
        try {
            Integer num = ejbSolicitud.crearSolicitud1(solicitud, cedula, codigorecurso, estado);
            msg = "Se crea la Solicitud No. " + num;
        } catch (BancoException be) {
            msg = be.getMessage();
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));

    }

    public void setRecursoSelected(Solicitud cte) {

        this.solicitudSelected = cte;
        this.solicitud = cte;
        System.out.println("Recurso seleccionado " + solicitud.getCodigorecurso());

    }

    public SelectItem[] tipoSolicitudValues() {
        SelectItem[] items = new SelectItem[TipoSolicitud.values().length];
        int i = 0;
        for (TipoSolicitud ti : TipoSolicitud.values()) {
            items[i++] = new SelectItem(ti, ti.getLabel());
        }
        return items;
    }

    public SelectItem[] tipoHoraValues() {
        SelectItem[] items = new SelectItem[TipoHora.values().length];
        int i = 0;
        for (TipoHora ti : TipoHora.values()) {
            items[i++] = new SelectItem(ti, ti.getLabel());
        }
        return items;
    }

    public SelectItem[] tipoTiempoPrestasmoValues() {
        SelectItem[] items = new SelectItem[TipoTiempoPrestamo.values().length];
        int i = 0;
        for (TipoTiempoPrestamo ti : TipoTiempoPrestamo.values()) {
            items[i++] = new SelectItem(ti, ti.getLabel());
        }
        return items;
    }

    public void modificarSolcitud() {
        System.out.println("Se invoca accion modificar solicitud " + solicitud.getCodigorecurso());
        String msg = "Solicitud actualizado con exito !!!";
        try {
            System.out.println("Nombre a modificar: " + solicitud.getCodigorecurso());
            ejbSolicitud.modificarSolicitud(solicitud);
            System.out.println("Se actualizo la solicitud " + solicitud.getCodigorecurso());
        } catch (Exception be) {
            msg = be.getMessage();
            System.out.println("Error:" + msg);
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
    }
}
